// Loesung_von_Aufgabe_2.3.4_4_drei_Koerper

float x1 = 550; // Ortskoordinate des roten Körpers
float x2 = 300; // Ortskoordinate des gelben Körpers
float x3 = 150; // Ortskoordinate des blauen Körpers
float v1 = -2; // Geschwindigkeit des roten Körpers
float v2 = 0; // Geschwindigkeit des gelben Körpers
float v3 = 0; // Geschwindigkeit des blauen Körpers
float u1; // Geschwindigkeit des roten Körpers nach dem Stoß
float u2; // Geschwindigkeit des gelben Körpers nach dem ersten Stoß
float w2; // Geschwindigkeit des gelben Körpers nach dem zweiten Stoß
float w3; // Geschwindigkeit des blauen Körpers nach dem Stoß
float m1 = 1; // Masse des roten Körpers
float m2 = 2; // Masse des gelben Körpers
float m3 = 1; // Masse des blauen Körpers
float t = 1; // Zeit

void setup() 
{
  size(600, 200); // Fenstergröße
}

void draw() 
{
  background(255); // Hintergrundfarbe
  fill(0, 0, 255); // Schriftfarbe
  textSize(32); // Schriftgröße
  textAlign(CENTER); // Die Mitte des Textes wird auf den x-Wert 300 gesetzt
  text("vollkommen elastischer Stoß", 300, 50); 

  fill(255, 0, 0);// roter Körper
  rect(x1, 200 - m1*20, 50, m1*20);

  fill(255, 255, 0); // gelber Körper
  rect(x2, 200 - m2*20, 50, m2*20);

  fill(0, 0, 255);// blauer Körper
  rect(x3, 200 - m3*20, 50, m3*20);



  x1 = x1 + v1 * t; // Ortskoordinate des gelben Körpers zur Zeit t
  x2 = x2 + v2 * t; // Ortskoordinate des roten Körpers zur Zeit t
  x3 = x3 + v3 * t; // Ortskoordinate des roten Körpers zur Zeit t

  if (x1 <= x2 + 50 && v1 - v2 <= 0) // Bedingung für den Stoßprozess zwischen Körper 1 und 2 
  {
    u1 = ((m1-m2)*v1)/(m1+m2); // Geschwindigkeit von roten Körpers nach den Stoß wird berechnet
    u2 = (2*m1*v1)/(m1+m2); // Geschwindigkeit von gelben Körpers nach den Stoß wird berechnet

    v1 = u1; // v1 nimmt den Wert von u1 an
    v2 = u2; // v2 nimmt den Wert von u2 an
  }

  if (x2 <= x3 + 50 && v2 - v3 <= 0) // Bedingung für den Stoßprozess zwischen Körper 1 und 2 
  {
    w2 = ((m2-m3)*u2)/(m2+m3); // Geschwindigkeit des gelben Körpers nach den Stoß wird berechnet
    w3 = (2*m2*u2)/(m2+m3); // Geschwindigkeit des blauen Körpers nach den Stoß wird berechnet

    v2 = w2; // v1 nimmt den Wert von u1 an
    v3 = w3; // v2 nimmt den Wert von u2 an
  }
  println("Rot u1 =", u1, "    ", "Gelb u2 =", u2, "     ", "Gelb w2 = ", w2, "     ", "Blau w3 = ", w3);
}